

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/fluid.png">
  <link rel="icon" href="/img/fluid.png">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="Dragonborn-zz">
  <meta name="keywords" content="">
  
    <meta name="description" content="# vim 键盘图  # vi&#x2F;vim 的使用 基本上 vi&#x2F;vim 共分为三种模式，命令模式（Command Mode）、输入模式（Insert Mode）和命令行模式（Command-Line Mode）。 # 命令模式 用户刚刚启动 vi&#x2F;vim，便进入了命令模式。 此状态下敲击键盘动作会被 Vim 识别为命令，而非输入字符，比如我们此时按下 i，并不会输入一个字符，i 被当作了一个命令。">
<meta property="og:type" content="article">
<meta property="og:title" content="vim常用命令">
<meta property="og:url" content="http://example.com/2024/02/06/%E5%B7%A5%E5%85%B7/vim%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/index.html">
<meta property="og:site_name" content="Dragonborn-zz&#39;s个人博客">
<meta property="og:description" content="# vim 键盘图  # vi&#x2F;vim 的使用 基本上 vi&#x2F;vim 共分为三种模式，命令模式（Command Mode）、输入模式（Insert Mode）和命令行模式（Command-Line Mode）。 # 命令模式 用户刚刚启动 vi&#x2F;vim，便进入了命令模式。 此状态下敲击键盘动作会被 Vim 识别为命令，而非输入字符，比如我们此时按下 i，并不会输入一个字符，i 被当作了一个命令。">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://www.runoob.com/wp-content/uploads/2015/10/vi-vim-cheat-sheet-sch.gif">
<meta property="og:image" content="http://example.com/2024/02/06/%E5%B7%A5%E5%85%B7/_resources/vim-vi-workmodel_52de27b995914cba974754e535802695.png">
<meta property="article:published_time" content="2024-02-06T09:40:01.000Z">
<meta property="article:modified_time" content="2024-02-18T03:28:48.555Z">
<meta property="article:author" content="Dragonborn-zz">
<meta property="article:tag" content="vim">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://www.runoob.com/wp-content/uploads/2015/10/vi-vim-cheat-sheet-sch.gif">
  
  
  
  <title>vim常用命令 - Dragonborn-zz&#39;s个人博客</title>

  <link  rel="stylesheet" href="https://lib.baomitu.com/twitter-bootstrap/4.6.1/css/bootstrap.min.css" />



  <link  rel="stylesheet" href="https://lib.baomitu.com/github-markdown-css/4.0.0/github-markdown.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/hint.css/2.7.0/hint.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css" />



<!-- 主题依赖的图标库，不要自行修改 -->
<!-- Do not modify the link that theme dependent icons -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />


  <link id="highlight-css" rel="stylesheet" href="/css/highlight.css" />
  
    <link id="highlight-css-dark" rel="stylesheet" href="/css/highlight-dark.css" />
  




  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    Fluid.ctx = Object.assign({}, Fluid.ctx)
    var CONFIG = {"hostname":"example.com","root":"/","version":"1.9.7","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false,"scope":[]},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"left","visible":"hover","icon":""},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"code_language":{"enable":true,"default":"TEXT"},"copy_btn":true,"image_caption":{"enable":true},"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"placement":"left","headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":0},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"follow_dnt":true,"baidu":null,"google":{"measurement_id":null},"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml","include_content_in_search":true};

    if (CONFIG.web_analytics.follow_dnt) {
      var dntVal = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
      Fluid.ctx.dnt = dntVal && (dntVal.startsWith('1') || dntVal.startsWith('yes') || dntVal.startsWith('on'));
    }
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
  


  
<meta name="generator" content="Hexo 6.3.0"></head>


<body>
  

  <header>
    

<div class="header-inner" style="height: 70vh;">
  <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>Dragonborn-zz</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/" target="_self">
                <i class="iconfont icon-home-fill"></i>
                <span>首页</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/" target="_self">
                <i class="iconfont icon-archive-fill"></i>
                <span>归档</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/" target="_self">
                <i class="iconfont icon-category-fill"></i>
                <span>分类</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/" target="_self">
                <i class="iconfont icon-tags-fill"></i>
                <span>标签</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="https://gitee.com/dragonborn-zz" target="_self">
                <i class="iconfont icon-user-fill"></i>
                <span>关于</span>
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              <i class="iconfont icon-search"></i>
            </a>
          </li>
          
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">
              <i class="iconfont icon-dark" id="color-toggle-icon"></i>
            </a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

  

<div id="banner" class="banner" parallax=true
     style="background: url('/img/home.png') no-repeat center center; background-size: cover;">
  <div class="full-bg-img">
    <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
      <div class="banner-text text-center fade-in-up">
        <div class="h2">
          
            <span id="subtitle" data-typed-text="vim常用命令"></span>
          
        </div>

        
          
  <div class="mt-3">
    
    
      <span class="post-meta">
        <i class="iconfont icon-date-fill" aria-hidden="true"></i>
        <time datetime="2024-02-06 09:40" pubdate>
          2024年2月6日 上午
        </time>
      </span>
    
  </div>

  <div class="mt-1">
    
      <span class="post-meta mr-2">
        <i class="iconfont icon-chart"></i>
        
          3k 字
        
      </span>
    

    
      <span class="post-meta mr-2">
        <i class="iconfont icon-clock-fill"></i>
        
        
        
          25 分钟
        
      </span>
    

    
    
  </div>


        
      </div>

      
    </div>
  </div>
</div>

</div>

  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="side-col d-none d-lg-block col-lg-2">
      
  <aside class="sidebar" style="padding-left: 2rem; margin-right: -1rem">
    <div id="toc">
  <p class="toc-header">
    <i class="iconfont icon-list"></i>
    <span>目录</span>
  </p>
  <div class="toc-body" id="toc-body"></div>
</div>



  </aside>


    </div>

    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div id="board">
          <article class="post-content mx-auto">
            <h1 id="seo-header">vim常用命令</h1>
            
            
              <div class="markdown-body">
                
                <h2 id="vim-键盘图"><a class="markdownIt-Anchor" href="#vim-键盘图">#</a> vim 键盘图</h2>
<p><img src="https://www.runoob.com/wp-content/uploads/2015/10/vi-vim-cheat-sheet-sch.gif" srcset="/img/loading.gif" lazyload alt=""></p>
<h2 id="vivim-的使用"><a class="markdownIt-Anchor" href="#vivim-的使用">#</a> vi/vim 的使用</h2>
<p>基本上 vi/vim 共分为三种模式，<strong>命令模式（Command Mode）、输入模式（Insert Mode）和命令行模式（Command-Line Mode）</strong>。</p>
<h3 id="命令模式"><a class="markdownIt-Anchor" href="#命令模式">#</a> 命令模式</h3>
<p><strong>用户刚刚启动 vi/vim，便进入了命令模式。</strong></p>
<p>此状态下敲击键盘动作会被 Vim 识别为命令，而非输入字符，比如我们此时按下 i，并不会输入一个字符，i 被当作了一个命令。</p>
<p>以下是普通模式常用的几个命令：</p>
<ul>
<li>i – 切换到输入模式，在光标当前位置开始输入文本。</li>
<li>x – 删除当前光标所在处的字符。</li>
<li>: – 切换到底线命令模式，以在最底一行输入命令。</li>
<li>a – 进入插入模式，在光标下一个位置开始输入文本。</li>
<li>o：在当前行的下方插入一个新行，并进入插入模式。</li>
<li>O – 在当前行的上方插入一个新行，并进入插入模式。</li>
<li>dd – 删除当前行。</li>
<li>yy – 复制当前行。</li>
<li>p – 粘贴剪贴板内容到光标下方。</li>
<li>P – 粘贴剪贴板内容到光标上方。</li>
<li>u – 撤销上一次操作。</li>
<li>Ctrl + r – 重做上一次撤销的操作。</li>
<li>:w – 保存文件。</li>
<li>:q – 退出 Vim 编辑器。</li>
<li>:q! – 强制退出 Vim 编辑器，不保存修改。</li>
</ul>
<p>若想要编辑文本，只需要启动 Vim，进入了命令模式，按下 i 切换到输入模式即可。</p>
<p>命令模式只有一些最基本的命令，因此仍要依靠<strong>底线命令行模式</strong>输入更多命令。</p>
<h3 id="输入模式"><a class="markdownIt-Anchor" href="#输入模式">#</a> 输入模式</h3>
<p>在命令模式下按下 i 就进入了输入模式，使用 Esc 键可以返回到普通模式。</p>
<p>在输入模式中，可以使用以下按键：</p>
<ul>
<li><strong>字符按键以及 Shift 组合</strong>，输入字符</li>
<li><strong>ENTER</strong>，回车键，换行</li>
<li><strong>BACK SPACE</strong>，退格键，删除光标前一个字符</li>
<li><strong>DEL</strong>，删除键，删除光标后一个字符</li>
<li><strong>方向键</strong>，在文本中移动光标</li>
<li><strong>HOME</strong>/<strong>END</strong>，移动光标到行首 / 行尾</li>
<li><strong>Page Up</strong>/<strong>Page Down</strong>，上 / 下翻页</li>
<li><strong>Insert</strong>，切换光标为输入 / 替换模式，光标将变成竖线 / 下划线</li>
<li><strong>ESC</strong>，退出输入模式，切换到命令模式</li>
</ul>
<h3 id="底线命令模式"><a class="markdownIt-Anchor" href="#底线命令模式">#</a> 底线命令模式</h3>
<p>在命令模式下按下 :（英文冒号）就进入了底线命令模式。</p>
<p>底线命令模式可以输入单个或多个字符的命令，可用的命令非常多。</p>
<p>在底线命令模式中，基本的命令有（已经省略了冒号）：</p>
<ul>
<li><code>:w</code> ：保存文件。</li>
<li><code>:q</code> ：退出 Vim 编辑器。</li>
<li><code>:wq</code> ：保存文件并退出 Vim 编辑器。</li>
<li><code>:q!</code> ：强制退出 Vim 编辑器，不保存修改。</li>
</ul>
<p>按 ESC 键可随时退出底线命令模式。</p>
<p>简单的说，我们可以将这三个模式想成底下的图标来表示：</p>
<p><img src="../_resources/vim-vi-workmodel_52de27b995914cba974754e535802695.png" srcset="/img/loading.gif" lazyload alt=""></p>
<hr>
<h3 id="第一部分一般模式可用的光标移动-复制粘贴-搜索替换等"><a class="markdownIt-Anchor" href="#第一部分一般模式可用的光标移动-复制粘贴-搜索替换等">#</a> 第一部分：一般模式可用的光标移动、复制粘贴、搜索替换等</h3>
<table>
<thead>
<tr>
<th style="text-align:left">移动光标的方法</th>
<th style="text-align:left"></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">h 或 向左箭头键 (←)</td>
<td style="text-align:left">光标向左移动一个字符</td>
</tr>
<tr>
<td style="text-align:left">j 或 向下箭头键 (↓)</td>
<td style="text-align:left">光标向下移动一个字符</td>
</tr>
<tr>
<td style="text-align:left">k 或 向上箭头键 (↑)</td>
<td style="text-align:left">光标向上移动一个字符</td>
</tr>
<tr>
<td style="text-align:left">l 或 向右箭头键 (→)</td>
<td style="text-align:left">光标向右移动一个字符</td>
</tr>
<tr>
<td style="text-align:left">[Ctrl] + [f]</td>
<td style="text-align:left">屏幕『向下』移动一页，相当于 [Page Down] 按键 (常用)</td>
</tr>
<tr>
<td style="text-align:left">[Ctrl] + [b]</td>
<td style="text-align:left">屏幕『向上』移动一页，相当于 [Page Up] 按键 (常用)</td>
</tr>
<tr>
<td style="text-align:left">[Ctrl] + [d]</td>
<td style="text-align:left">屏幕『向下』移动半页</td>
</tr>
<tr>
<td style="text-align:left">[Ctrl] + [u]</td>
<td style="text-align:left">屏幕『向上』移动半页</td>
</tr>
<tr>
<td style="text-align:left">+</td>
<td style="text-align:left">光标移动到非空格符的下一行</td>
</tr>
<tr>
<td style="text-align:left">-</td>
<td style="text-align:left">光标移动到非空格符的上一行</td>
</tr>
<tr>
<td style="text-align:left">n&lt;space&gt;</td>
<td style="text-align:left">那个 n 表示『数字』，例如 20 。按下数字后再按空格键，光标会向右移动这一行的 n 个字符。例如 20&lt;space&gt; 则光标会向后面移动 20 个字符距离。</td>
</tr>
<tr>
<td style="text-align:left">0 或功能键 [Home]</td>
<td style="text-align:left">这是数字『 0 』：移动到这一行的最前面字符处 (常用)</td>
</tr>
<tr>
<td style="text-align:left">$ 或功能键 [End]</td>
<td style="text-align:left">移动到这一行的最后面字符处 (常用)</td>
</tr>
<tr>
<td style="text-align:left">H</td>
<td style="text-align:left">光标移动到这个屏幕的最上方那一行的第一个字符</td>
</tr>
<tr>
<td style="text-align:left">M</td>
<td style="text-align:left">光标移动到这个屏幕的中央那一行的第一个字符</td>
</tr>
<tr>
<td style="text-align:left">L</td>
<td style="text-align:left">光标移动到这个屏幕的最下方那一行的第一个字符</td>
</tr>
<tr>
<td style="text-align:left">G</td>
<td style="text-align:left">移动到这个档案的最后一行 (常用)</td>
</tr>
<tr>
<td style="text-align:left">nG</td>
<td style="text-align:left">n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行 (可配合 :set nu)</td>
</tr>
<tr>
<td style="text-align:left">gg</td>
<td style="text-align:left">移动到这个档案的第一行，相当于 1G 啊！ (常用)</td>
</tr>
<tr>
<td style="text-align:left">n&lt;Enter&gt;</td>
<td style="text-align:left">n 为数字。光标向下移动 n 行 (常用)</td>
</tr>
</tbody>
</table>
<p>** 搜索替换 **<br>
| /word | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串，就输入 /vbird 即可！ (常用) |<br>
| ?word | 向光标之上寻找一个字符串名称为 word 的字符串。 |<br>
| n | 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说， 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串，则按下 n 后，会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行？vbird 的话，那么按下 n 则会向上继续搜寻名称为 vbird 的字符串！ |<br>
| N | 这个 N 是英文按键。与 n 刚好相反，为『反向』进行前一个搜寻动作。 例如 /vbird 后，按下 N 则表示『向上』搜寻 vbird 。 |<br>
| 使用 /word 配合 n 及 N 是非常有帮助的！可以让你重复的找到一些你搜寻的关键词！ | |<br>
| :n1,n2s/word1/word2/g | n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串，并将该字符串取代为 word2 ！举例来说，在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则：<br>
『:100,200s/vbird/VBIRD/g』。(常用) |<br>
| :1,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi mathvariant="normal">/</mi><mi>w</mi><mi>o</mi><mi>r</mi><mi>d</mi><mn>1</mn><mi mathvariant="normal">/</mi><mi>w</mi><mi>o</mi><mi>r</mi><mi>d</mi><mn>2</mn><mi mathvariant="normal">/</mi><mi>g</mi><mtext>或</mtext><mo>:</mo></mrow><annotation encoding="application/x-tex">s/word1/word2/g 或 :%s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串，并将该字符串取代为 word2 ！(常用) | | :1,</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">s</span><span class="mord">/</span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mord mathnormal" style="margin-right:0.02778em;">or</span><span class="mord mathnormal">d</span><span class="mord">1/</span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mord mathnormal" style="margin-right:0.02778em;">or</span><span class="mord mathnormal">d</span><span class="mord">2/</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord cjk_fallback">或</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">:</span></span></span></span>s/word1/word2/gc 或 :% s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串，并将该字符串取代为 word2 ！且在取代前显示提示字符给用户确认 (confirm) 是否需要取代！(常用) |<br>
| 删除、复制与贴上 | |<br>
| x, X | 在一行字当中，x 为向后删除一个字符 (相当于 [del] 按键)， X 为向前删除一个字符 (相当于 [backspace] 亦即是退格键) (常用) |<br>
| nx | n 为数字，连续向后删除 n 个字符。举例来说，我要连续删除 10 个字符， 『10x』。 |<br>
| dd | 剪切游标所在的那一整行 (常用)，用 p/P 可以粘贴。 |<br>
| ndd | n 为数字。剪切光标所在的向下 n 行，例如 20dd 则是剪切 20 行 (常用)，用 p/P 可以粘贴。 |<br>
| d1G | 删除光标所在到第一行的所有数据 |<br>
| dG | 删除光标所在到最后一行的所有数据 |<br>
| d$ | 删除游标所在处，到该行的最后一个字符 |<br>
| d0 | 那个是数字的 0 ，删除游标所在处，到该行的最前面一个字符 |<br>
| yy | 复制游标所在的那一行 (常用) |<br>
| nyy | n 为数字。复制光标所在的向下 n 行，例如 20yy 则是复制 20 行 (常用) |<br>
| y1G | 复制游标所在行到第一行的所有数据 |<br>
| yG | 复制游标所在行到最后一行的所有数据 |<br>
| y0 | 复制光标所在的那个字符到该行行首的所有数据 |<br>
| y$ | 复制光标所在的那个字符到该行行尾的所有数据 |<br>
| p, P | p 为将已复制的数据在光标下一行贴上，P 则为贴在游标上一行！ 举例来说，我目前光标在第 20 行，且已经复制了 10 行数据。则按下 p 后， 那 10 行数据会贴在原本的 20 行之后，亦即由 21 行开始贴。但如果是按下 P 呢？ 那么原本的第 20 行会被推到变成 30 行。 (常用) |<br>
| J | 将光标所在行与下一行的数据结合成同一行 |<br>
| c | 重复删除多个数据，例如向下删除 10 行，[10cj] |<br>
| u | 复原前一个动作。(常用) |<br>
| [Ctrl]+r | 重做上一个动作。(常用) |<br>
| . | 不要怀疑！这就是小数点！意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作，按下小数点『.』就好了！ (常用) |<br>
| 如果你将右手放在键盘上的话，你会发现 hjkl 是排列在一起的，因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话，例如向下移动 30 行，可以使用 “30j” 或 “30↓” 的组合按键， 亦即加上想要进行的次数 (数字) 后，按下动作即可！ | |</p>
<h3 id="第二部分一般模式切换到编辑模式的可用的按钮说明"><a class="markdownIt-Anchor" href="#第二部分一般模式切换到编辑模式的可用的按钮说明">#</a> 第二部分：一般模式切换到编辑模式的可用的按钮说明</h3>
<table>
<thead>
<tr>
<th>进入输入或取代的编辑模式</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>i, I</td>
<td>进入输入模式 (Insert mode)：</td>
</tr>
<tr>
<td>i 为『从目前光标所在处输入』， I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)</td>
</tr>
<tr>
<td>a, A</td>
<td>进入输入模式 (Insert mode)：</td>
</tr>
<tr>
<td>a 为『从目前光标所在的下一个字符处开始输入』， A 为『从光标所在行的最后一个字符处开始输入』。(常用)</td>
</tr>
<tr>
<td>o, O</td>
<td>进入输入模式 (Insert mode)：</td>
</tr>
<tr>
<td>这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行； O 为在目前光标所在的上一行处输入新的一行！(常用)</td>
</tr>
<tr>
<td>r, R</td>
<td>进入取代模式 (Replace mode)：</td>
</tr>
<tr>
<td>r 只会取代光标所在的那一个字符一次；R 会一直取代光标所在的文字，直到按下 ESC 为止；(常用)</td>
</tr>
<tr>
<td>上面这些按键中，在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 由名称就知道该动作了吧！！特别注意的是，我们上面也提过了，你想要在档案里面输入字符时， 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔！</td>
<td></td>
</tr>
<tr>
<td>[Esc]</td>
<td>退出编辑模式，回到一般模式中 (常用)</td>
</tr>
</tbody>
</table>
<h3 id="第三部分一般模式切换到指令行模式的可用的按钮说明"><a class="markdownIt-Anchor" href="#第三部分一般模式切换到指令行模式的可用的按钮说明">#</a> 第三部分：一般模式切换到指令行模式的可用的按钮说明</h3>
<table>
<thead>
<tr>
<th>指令行的储存、离开等指令</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>:w</td>
<td>将编辑的数据写入硬盘档案中 (常用)</td>
</tr>
<tr>
<td>:w!</td>
<td>若文件属性为『只读』时，强制写入该档案。不过，到底能不能写入， 还是跟你对该档案的档案权限有关啊！</td>
</tr>
<tr>
<td>:q</td>
<td>离开 vi (常用)</td>
</tr>
<tr>
<td>:q!</td>
<td>若曾修改过档案，又不想储存，使用！为强制离开不储存档案。</td>
</tr>
<tr>
<td>注意一下啊，那个惊叹号 (!) 在 vi 当中，常常具有『强制』的意思～</td>
<td></td>
</tr>
<tr>
<td>:wq</td>
<td>储存后离开，若为 :wq! 则为强制储存后离开 (常用)</td>
</tr>
<tr>
<td>ZZ</td>
<td>这是大写的 Z 喔！如果修改过，保存当前文件，然后退出！效果等同于 (保存并退出)</td>
</tr>
<tr>
<td>ZQ</td>
<td>不保存，强制退出。效果等同于 :q!。</td>
</tr>
<tr>
<td>:w [filename]</td>
<td>将编辑的数据储存成另一个档案（类似另存新档）</td>
</tr>
<tr>
<td>:r [filename]</td>
<td>在编辑的数据中，读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面</td>
</tr>
<tr>
<td>:n1,n2 w [filename]</td>
<td>将 n1 到 n2 的内容储存成 filename 这个档案。</td>
</tr>
<tr>
<td>:! command</td>
<td>暂时离开 vi 到指令行模式下执行 command 的显示结果！例如</td>
</tr>
<tr>
<td>『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息！</td>
</tr>
<tr>
<td>vim 环境的变更</td>
<td></td>
</tr>
<tr>
<td>:set nu</td>
<td>显示行号，设定之后，会在每一行的前缀显示该行的行号</td>
</tr>
<tr>
<td>:set nonu</td>
<td>与 set nu 相反，为取消行号！</td>
</tr>
</tbody>
</table>
<p>特别注意，在 vi/vim 中，数字是很有意义的！数字通常代表重复做几次的意思！ 也有可能是代表去到第几个什么什么的意思。</p>
<p>举例来说，要删除 50 行，则是用 『50dd』 对吧！ 数字加在动作之前，如我要向下移动 20 行呢？那就是『20j』或者是『20↓』即可。</p>

                
              </div>
            
            <hr/>
            <div>
              <div class="post-metas my-3">
  
    <div class="post-meta mr-3 d-flex align-items-center">
      <i class="iconfont icon-category"></i>
      

<span class="category-chains">
  
  
    
      <span class="category-chain">
        
  <a href="/categories/%E5%B7%A5%E5%85%B7/" class="category-chain-item">工具</a>
  
  

      </span>
    
  
</span>

    </div>
  
  
    <div class="post-meta">
      <i class="iconfont icon-tags"></i>
      
        <a href="/tags/vim/" class="print-no-link">#vim</a>
      
    </div>
  
</div>


              

              
                <div class="post-prevnext my-3">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2024/02/18/android/Android%E5%90%84%E7%89%88%E6%9C%AC%E5%AF%B9%E5%BA%94%E7%9A%84SDK%E5%8F%8AJDK%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82/" title="Android各版本对应的SDK及JDK版本要求">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">Android各版本对应的SDK及JDK版本要求</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2024/02/06/java/%E5%AF%B9PageHelper%E4%BD%BF%E7%94%A8%E7%9A%84%E5%B0%81%E8%A3%85/" title="对PageHelper使用的封装">
                        <span class="hidden-mobile">对PageHelper使用的封装</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
          </article>
        </div>
      </div>
    </div>

    <div class="side-col d-none d-lg-block col-lg-2">
      

    </div>
  </div>
</div>





  



  



  



  



  







    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v" for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>

    

    
  </main>

  <footer>
    <div class="footer-inner">
  
    <div class="footer-content">
       <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> 
    </div>
  
  
  
    <!-- 备案信息 ICP for China -->
    <div class="beian">
  <span>
    <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">
      皖ICP备2023001508号
    </a>
  </span>
  
</div>

  
  
</div>

  </footer>

  <!-- Scripts -->
  
  <script  src="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://lib.baomitu.com/jquery/3.6.4/jquery.min.js" ></script>
<script  src="https://lib.baomitu.com/twitter-bootstrap/4.6.1/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>


  <script  src="https://lib.baomitu.com/typed.js/2.0.12/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var subtitle = document.getElementById('subtitle');
      if (!subtitle || !typing) {
        return;
      }
      var text = subtitle.getAttribute('data-typed-text');
      
        typing(text);
      
    })(window, document);
  </script>




  
    <script  src="/js/img-lazyload.js" ></script>
  




  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/tocbot/4.20.1/tocbot.min.js', function() {
    var toc = jQuery('#toc');
    if (toc.length === 0 || !window.tocbot) { return; }
    var boardCtn = jQuery('#board-ctn');
    var boardTop = boardCtn.offset().top;

    window.tocbot.init(Object.assign({
      tocSelector     : '#toc-body',
      contentSelector : '.markdown-body',
      linkClass       : 'tocbot-link',
      activeLinkClass : 'tocbot-active-link',
      listClass       : 'tocbot-list',
      isCollapsedClass: 'tocbot-is-collapsed',
      collapsibleClass: 'tocbot-is-collapsible',
      scrollSmooth    : true,
      includeTitleTags: true,
      headingsOffset  : -boardTop,
    }, CONFIG.toc));
    if (toc.find('.toc-list-item').length > 0) {
      toc.css('visibility', 'visible');
    }

    Fluid.events.registerRefreshCallback(function() {
      if ('tocbot' in window) {
        tocbot.refresh();
        var toc = jQuery('#toc');
        if (toc.length === 0 || !tocbot) {
          return;
        }
        if (toc.find('.toc-list-item').length > 0) {
          toc.css('visibility', 'visible');
        }
      }
    });
  });
</script>


  <script src=https://lib.baomitu.com/clipboard.js/2.0.11/clipboard.min.js></script>

  <script>Fluid.plugins.codeWidget();</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/anchor-js/4.3.1/anchor.min.js', function() {
    window.anchors.options = {
      placement: CONFIG.anchorjs.placement,
      visible  : CONFIG.anchorjs.visible
    };
    if (CONFIG.anchorjs.icon) {
      window.anchors.options.icon = CONFIG.anchorjs.icon;
    }
    var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
    var res = [];
    for (var item of el) {
      res.push('.markdown-body > ' + item.trim());
    }
    if (CONFIG.anchorjs.placement === 'left') {
      window.anchors.options.class = 'anchorjs-link-left';
    }
    window.anchors.add(res.join(', '));

    Fluid.events.registerRefreshCallback(function() {
      if ('anchors' in window) {
        anchors.removeAll();
        var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
        var res = [];
        for (var item of el) {
          res.push('.markdown-body > ' + item.trim());
        }
        if (CONFIG.anchorjs.placement === 'left') {
          anchors.options.class = 'anchorjs-link-left';
        }
        anchors.add(res.join(', '));
      }
    });
  });
</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js', function() {
    Fluid.plugins.fancyBox();
  });
</script>


  <script>Fluid.plugins.imageCaption();</script>

  <script  src="/js/local-search.js" ></script>





<!-- 主题的启动项，将它保持在最底部 -->
<!-- the boot of the theme, keep it at the bottom -->
<script  src="/js/boot.js" ></script>


  

  <noscript>
    <div class="noscript-warning">博客在允许 JavaScript 运行的环境下浏览效果更佳</div>
  </noscript>
</body>
</html>
